/* 
 * File:   Config.h
 * Author: Zeeno
 *
 * Created on 29. únor 2012, 9:11
 */

#ifndef CONFIG_H
#define	CONFIG_H

/*
 * Knihovna pro čtení a psaní do INI kompatibilních souborů
 * 
 * UTF-8 soubory
 * bílé znaky ze začátku a konce klíčů a sekcí ignorovat
 * možnost prázdných řádků
 * Textové hodnoty vždy ohraničovat uvozovkami ""
 * znak komentáře ; #  umožnit kdekoliv, avšak ne v "textu"
 * escapování znaků \\ \n \"
 * možnost multivalue oddělených čárkou,
 * zákaz duplikování názvů v rámci jedné sekce
 * case insensitive v případě sekcí a klíčů
 * zavést možnost globálního kontextu? - to je ten beze jména, hned na začátku souboru a jmenuje se [GLOBAL]
 * 
 * class Config je kontejnerem pro class Section a obsahuje položku comment
 * class Section je kontejnerem pro class Property a obsahuje položku comment (komentář následující ihned po uvedení [Section], pokud je zde prázdný řádek, jedná se už o preComment u Property)
 * class Property je kontejnerem pro class Value a obsahuje položky comment (komentář na stejné lajně) a položku preComment (komentář předcházející této vlastnosti)
 * struct Value je držitelem hodnoty number(double) nebo text(string)
 * 
 * 
 * Config přečte celý soubor, vezme si začáteční komentář a zbytek souboru rozdělí
 * na jednotlivé sekce. Ze sekcí odstraní název sekce a zbytek textu sekce předá
 * k rozparsování třídě Section. Ta si vezme komentář sekce, rozdělí zbytek textu
 * na property (včetně jejich předkomentářů) a dá k rozparsování třídě Property.
 * Třída Property si vezme předkomentář, název klíče a jednotlivé hodnoty uloží
 * do jednotlivých Value a nakonec si vezme komentář. Tím by měl být text předán
 * k parsování prázdný.
 * 
 * Zápis do souboru bude probíhat přesně opačným způsobem.
 * 
 */


namespace vertigo {

    enum VALUETYPE {
        NUMBER,
        TEXT
    };

    class Config;

    namespace config {

        class Section;

        class Property;

        struct Value;
    }

}

#endif	/* VCONFIG_H */

